package cn.smile.excel.writer.jxl;

import cn.smile.excel.writer.WriteExcel;
import jxl.write.Label;

import java.util.List;

/**
 * 写Excel的工具
 *
 * @Author: 毛苏宇
 * User: me
 * Date: 2019/12/1
 * Time: 18:16
 * Description: 对Excel的写
 */
public class JXLWriteExcel {


    /**
     * Excel基本信息
     */
    private ExcelInfo excelInfo;
    public JXLWriteExcel(ExcelInfo excelInfo) {
        this.excelInfo = excelInfo;
    }

    /**
     * 添加标题
     *
     * @param titles 含有标题的数组
     * @throws Exception
     */
    public void addTitle(String[] titles) {
        for (int i = 0; i < titles.length; i++) {
            addData(i, 0, titles[i]);
        }
    }

    /**
     * 添加单行数据
     *
     * @param rowData
     */
    public void addData(String[] rowData) {
        final int rowSize = excelInfo.getSheet().getRows();
        for (int i = 0; i < rowData.length; i++) {
            for (int j = 0; j < rowData.length; j++) {
                addData(j, rowSize, rowData[j]);
            }
        }
    }

    /**
     * 添加数据，有关插入的函数都依赖于此函数。
     * 若要插入，调用该函数即可。
     * 无需再编写其它插入的代码
     *
     * @param rowNum 第几行
     * @param colNum 第几个单元格
     * @param value  单元格中的数据
     */
    private void addData(int rowNum, int colNum, String value) {
        try {
            excelInfo.getSheet().addCell(new Label(rowNum, colNum, value));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加标题及数据
     *
     * @param titles
     * @param data
     */
    public void addDate(String[] titles, String[] data) {
        addTitle(titles);
        addData(data);
    }

    /**
     * 添加多条数据
     *
     * @param datas
     */
    public void addDate(List<String[]> datas) {
        for (String[] data : datas) {
            addData(data);
        }
    }

    /**
     * 添加多条数据
     *
     * @param titles
     * @param datas
     */
    public void addDate(String[] titles, List<String[]> datas) {
        addTitle(titles);
        for (String[] data : datas) {
            addData(data);
        }
    }


    /**
     * 关闭workbook并顺便写入数据
     */
    public void writeAndClose() {
        try {
            if (excelInfo.getWorkBook() != null) {
                //写入到Excel中
                excelInfo.getWorkBook().write();
                //关闭
                excelInfo.getWorkBook().close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
